package gee

import (
	"log"
	"net/http"
)

type HandlerFunc func(*Context)

type Engine struct {
	router *router //此处返回的是路由映像表，此表key值表示我们要进行的操作，value值表示处理方法
}

func New() *Engine {
	return &Engine{router: newRouter()} //初始化过程，建新表
}

func (engine *Engine) addRoute(method string, pattern string, handler HandlerFunc) { //这是一个添加函数
	log.Printf("Route %4s - %s", method, pattern)
	engine.router.addRoute(method, pattern, handler)
}

func (engine *Engine) GET(pattern string, handler HandlerFunc) { //此函数用来GET操作，GET里面的第二个参数是一个接口，只要有ServeHTTP方法即可实现
	engine.addRoute("GET", pattern, handler)
}

func (engine *Engine) POST(pattern string, handler HandlerFunc) { //此函数用来POST操作
	engine.addRoute("POST", pattern, handler)
}

func (engine *Engine) Run(addr string) (err error) { //最后面那个括号里面是返回值						//此函数用来Run操作
	return http.ListenAndServe(addr, engine)
}

func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) { //ServeHttp的目的是解析请求路径查找路由映像表
	c := newContext(w, req)
	engine.router.handle(c)
}
